#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<stdlib.h>

//
//int main()
//{
//  int i = 0;
//  for( i = 0; i < 150; ++i)
//  {
//    printf("%d:%s\n", i, strerror(i));
//
//  }
//  return 0;
//}
//
//
//
//#include<stdlib.h>
//#include<unistd.h>
//void show()
//{
//  printf("hello Linux");
//  _exit(2);
//}
//
//int main()
//{
//  show();
//  return 0;
//}
//
//int main()
//{
//  pid_t id = fork();
//  if(id == 0){
//    //child
//    int count = 10;
//    while(--count){
//      printf("I am child...PID:%d, PPID:%d\n", getpid(), getppid());
//      sleep(1);
//    }
//    exit(0);
//  }
//
//  //father
//  int status = 0;
//  pid_t ret = waitpid(id, &status, 0);
//  if(ret >= 0)
//  {
//    //wait success
//    printf("wait child success...\n");
//    if(WIFEXITED(status)){
//      //exit normal
//      printf("exit code:%d\n", WEXITSTATUS(status));
//    }
//    else{
//      //signal killed
//      printf("killed by siganl %d\n", status & 0x7F);
//    }
//  }
//
//  sleep(3);
//  return 0;
//}
//

int main()
{
  pid_t ids[10];
  int i = 0;
  for(i; i < 10; ++i)
  {
    pid_t id = fork();
    if(id == 0){
      //child
      printf("child process created succeefully...PID:%d\n", getpid());
      sleep(3);
      exit(1);
    }
    //father
    ids[i] = id;
  }
  for(i = 0; i < 10; ++i)
  {
    int status = 0;
    pid_t ret = waitpid(ids[i], &status, 0);
    if(ret >= 0)
    {
      //等待成功
      printf("wait child success..PID:%d\n", ids[i]);
      if(WIFEXITED(status)){
        printf("exit code:%d\n", WEXITSTATUS(status));
      }
      else{
        //signal killed
        printf("kelled by signal %d\n",status & 0x7F );
      }
    }
  }

 return 0;
}

//
//int main()
//{
//  pid_t id = fork();
//  if(id == 0)
//  {
//    //child
//    int count = 3;
//    while(--count){
//      printf("child do something...PID:%d, PPID:%d\n", getpid(), getppid());
//      sleep(3);
//    }
//  }
//    exit(0);
//    //father
//    while(1)
//    {
//      int status = 0;
//      pid_t ret = waitpid(id, &status, WNOHANG);
//      if(ret > 0){
//        printf("wait child success...\n");
//        printf("exit code:%d\n", WEXITSTATUS(status));
//        break;
//      }
//      else if(ret == 0){
//        printf("father do other things...\n");
//        sleep(1);
//      }
//      else{
//        printf("waitpid error...\n");
//        break;
//      } 
//     }
//
//    return 0;
//}
